package mobile.vo;

/**
 * 手机api返回结果
 * @author zhiyuan
 * @version v1.0
 * @since 2016年12月5日 下午11:02:17
 */
public class Result {
	
	public static enum ResultCode{
		
		OK(200, "操作成功"),
		UNAUTHORIZED(401, "还未登录"),
		FORBIDDEN(403, "未授权"),
		NOT_FOUND(404, "数据未找到"),
		ERROR(500, "系统错误"),
		FAIL(800, "操作失败"),
		INVALID_PARAM(900, "参数错误");
		
		private int code;
		private String msg;
		
		private ResultCode(int code, String msg){
			this.code = code;
			this.msg = msg;
		}
		public int getCode() {
			return code;
		}
		public void setCode(int code) {
			this.code = code;
		}
		public String getMsg() {
			return msg;
		}
		public void setMsg(String msg) {
			this.msg = msg;
		}
		
	}
	
	private int code;
	private String message;
	private Object data;

	private Result(){
		
	}
	
	/**
	 * 参数错误
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @param msg
	 * @return
	 */
	public static Result invalidParamWithMsg(String msg){
		Result result = new Result();
		result.setCode(ResultCode.INVALID_PARAM.getCode());
		result.setMessage(msg);
		return result;
	}
	
	/**
	 * 参数错误
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @param msg
	 * @return
	 */
	public static Result invalidParam(){
		Result result = new Result();
		result.setCode(ResultCode.INVALID_PARAM.getCode());
		result.setMessage(ResultCode.INVALID_PARAM.getMsg());
		return result;
	}
	
	/**
	 * 操作成功
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @param msg
	 * @return
	 */
	public static Result optSuccess(){
		Result result = new Result();
		result.setCode(ResultCode.OK.getCode());
		result.setMessage(ResultCode.OK.getMsg());
		return result;
	}
	
	/**
	 * 操作成功并返回信息
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @param msg
	 * @return
	 */
	public static Result optSuccessWithMsg(String msg){
		Result result = new Result();
		result.setCode(ResultCode.OK.getCode());
		result.setMessage(msg);
		return result;
	}
	
	/**
	 * 需要身份验证
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @return
	 */
	public static Result unauthorized(){
		Result result = new Result();
		result.setCode(ResultCode.UNAUTHORIZED.getCode());
		return result;
	}
	
	/**
	 * 操作成功并返回数据
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @return
	 */
	public static Result optSuccessWithData(Object obj){
		Result result = new Result();
		result.setCode(ResultCode.OK.getCode());
		result.setData(obj);
		return result;
	}
	
	/**
	 * 服务器出错并返回信息
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @param msg
	 * @return
	 */
	public static Result errorWithMsg(String msg){
		Result result = new Result();
		result.setCode(ResultCode.ERROR.getCode());
		result.setMessage(msg);
		return result;	
	}
	
	/**
	 * 服务器出错
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @param msg
	 * @return
	 */
	public static Result error(){
		Result result = new Result();
		result.setCode(ResultCode.ERROR.getCode());
		result.setMessage(ResultCode.ERROR.getMsg());
		return result;	
	}
	
	/**
	 * 操作失败
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @return
	 */
	public static Result fail(){
		Result result = new Result();
		result.setCode(ResultCode.FAIL.getCode());
		result.setMessage(ResultCode.FAIL.getMsg());
		return result;	
	}
	
	/**
	 * 操作失败并返回失败信息
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月5日
	 * @param msg
	 * @return
	 */
	public static Result failWithMsg(String msg){
		Result result = new Result();
		result.setCode(ResultCode.FAIL.getCode());
		result.setMessage(msg);
		return result;	
	}
	
	/**
	 * 查询的资源不存在
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月6日
	 * @return
	 */
	public static Result resourceNotFound(){
		Result result = new Result();
		result.setCode(ResultCode.NOT_FOUND.getCode());
		return result;	
	}
	
	/**
	 * 查询的资源不存在并返回信息
	 * @author 刘志远<yuanzhi-2@163.com>
	 * @since 2016年12月6日
	 * @param msg
	 * @return
	 */
	public static Result resourceNotFoundWithMsg(String msg){
		Result result = new Result();
		result.setCode(ResultCode.NOT_FOUND.getCode());
		result.setMessage(msg);
		return result;	
	}

	public int getCode() {
		return code;
	}

	public void setCode(int code) {
		this.code = code;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}
}
